package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import negocio.Comanda;
import negocio.ItemComanda;
import negocio.Mesa;

public class DAOMesa {
private static DAOMesa instancia;
	
	private DAOMesa(){
			
	}
	
	public static DAOMesa getInstancia() {
		if(instancia == null)
			return instancia = new DAOMesa();
		return instancia;
	}

	public Mesa buscarMesa(int nroMesa) {
			Connection connection = AdministradorDeConexion.getInstancia().connect();

			try{
				String query =  "SELECT * FROM Mesa WHERE NroMesa = ?";
				PreparedStatement preparedStatement = null;
				preparedStatement = connection.prepareStatement(query);
				Mesa mesa = null;
				preparedStatement.setInt(1, nroMesa);
				ResultSet result = preparedStatement.executeQuery();	
				System.out.println("LLEGUE");
				while (result.next()){
					
					// Constructor ItemComanda:
					// 
					
					mesa = new Mesa(nroMesa,result.getString("Disponibilidad"), result.getString("Descripcion"),
							DAOComanda.getInstancia().obtenerComandas(nroMesa));
					System.out.println(mesa.getComandas().size());
					for(Comanda comanda: mesa.getComandas())
						for(ItemComanda ic: comanda.getItemsComanda())
							System.out.println(ic.getNroItem()+ic.getCantidad()+ic.getPlato().getNombre());
					
				}
				AdministradorDeConexion.getInstancia().closeConnection(connection);

				return mesa;
			}
			catch (SQLException e) {

				AdministradorDeConexion.getInstancia().closeConnection(connection);
				System.out.println("Error: DAOItemComanda.buscarMesa(): Error al buscar la Mesa "  + nroMesa +  " en la Base de Datos. " + e.getLocalizedMessage());

			}
			catch (Exception e) {

				AdministradorDeConexion.getInstancia().closeConnection(connection);
				System.out.println("Error: DAOItemComanda.buscarMesa(): Error al buscar la Mesa "  + nroMesa + " en la Base de Datos. " + e.getLocalizedMessage());

			}
			return null;
		
	}

	public void asignarComandaAMesa(int nroComanda, int nroMesa) {
		// TODO Auto-generated method stub
		Connection connection = AdministradorDeConexion.getInstancia().connect();

		try{
			String query =  "UPDATE Comanda set NroMesa=? where NroComanda=?";
			PreparedStatement preparedStatement = null;
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, nroMesa);
			preparedStatement.setInt(1, nroComanda);
			preparedStatement.execute();	
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			
		}
		catch (SQLException e) {

			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOItemComanda.buscarItemComanda(): Error al buscar la Mesa "  + nroMesa +  " en la Base de Datos. " + e.getLocalizedMessage());

		}
	}

	public Collection<Mesa> obtenerMesas() {
		Connection connection = AdministradorDeConexion.getInstancia().connect();

		try{
			String query =  "SELECT * FROM Mesa";
			PreparedStatement preparedStatement = null;
			preparedStatement = connection.prepareStatement(query);
			Collection<Mesa> mesas = new ArrayList<Mesa>();
			ResultSet result = preparedStatement.executeQuery();

			while (result.next()){
				
				// Constructor ItemComanda:
				// 
				
				mesas.add(new Mesa(result.getInt("NroMesa"),result.getString("Disponibilidad"), result.getString("Descripcion"),
						DAOComanda.getInstancia().obtenerComandas(result.getInt("NroMesa"))));
				
				
				
			}
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			return mesas;
		}
		catch (SQLException e) {

			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOItemComanda.buscarMesas(): Error al buscar las Mesas en la Base de Datos. " + e.getErrorCode());

		}
		catch (Exception e) {

			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOItemComanda.buscarMesas(): Error al buscar las Mesas en la Base de Datos. " + e.getLocalizedMessage());

		}
		return null;
	}

	
}
